class User
  include Mongoid::Document
  # Include default devise modules. Others available are:
  # :token_authenticatable, :confirmable,
  # :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  ## Database authenticatable
  field :name,               :type => String, :default => ""
  field :email,              :type => String, :default => ""
  before_validation do |doc|
    if doc.email == '' then doc.email = "#{doc.name}@a.b" end
  end
  field :encrypted_password, :type => String, :default => ""
  
  ## Recoverable
  field :reset_password_token,   :type => String
  field :reset_password_sent_at, :type => Time

  ## Rememberable
  field :remember_created_at, :type => Time

  ## Trackable
  field :sign_in_count,      :type => Integer, :default => 0
  field :current_sign_in_at, :type => Time
  field :last_sign_in_at,    :type => Time
  field :current_sign_in_ip, :type => String
  field :last_sign_in_ip,    :type => String

  ## Confirmable
  # field :confirmation_token,   :type => String
  # field :confirmed_at,         :type => Time
  # field :confirmation_sent_at, :type => Time
  # field :unconfirmed_email,    :type => String # Only if using reconfirmable

  ## Lockable
  # field :failed_attempts, :type => Integer, :default => 0 # Only if lock strategy is :failed_attempts
  # field :unlock_token,    :type => String # Only if unlock strategy is :email or :both
  # field :locked_at,       :type => Time

  ## Token authenticatable
  # field :authentication_token, :type => String
  field :name_display, type: String, default: ''
  has_many :topics, class_name: 'Topic', inverse_of: :author
  has_many :remarks, class_name: 'Remark', inverse_of: :author
  has_many :question_lists, class_name: 'QuestionList', inverse_of: :author
  has_many :question_versions, class_name: 'QuestionVersion', inverse_of: :author
  has_many :tasks_author, class_name: "Task", inverse_of: :author
  has_many :tasks_assigned_to, class_name: "Task", inverse_of: :assigned_to
  has_many :notifications, order: :created_at.desc

  mount_uploader :avatar, AvatarUploader

  def to_param
    name
  end
end
